package `01-agency`

import kotlin.properties.Delegates

fun main() {
    /**
     * Delegates.observable函数是系统实现的一种代理。
     * 功能：修改数据的时候，通知用户，用户可以进行一些操作，比如：添加日志
     *
     * Delegates.observable函数使用了高级函数，lambda。
     * 输入有两个参数，一个String，初始数据，第二个参数是函数类型，类型是(KProperty<*>, T, T) -> Unit)
     * 输出ReadWriteProperty<Any?, T>
     */
    var str:String by Delegates.observable("初始数据"){property, oldValue, newValue ->
        //修改str的时候会通知到这里，不影响数据的修改
        println("数据被修改了，修改前数据=$oldValue，修改后数据是$newValue")
    }

    println(str) //初始值
    str = "新数据" //修改数据
    println(str)
}